using MauiApp.ViewModels;
using Microsoft.Maui.Controls;
using System;
using System.Threading.Tasks;
using MauiApp.Services;
using Microsoft.Maui.ApplicationModel;

namespace MauiApp.Views
{
    public partial class LoginPage : ContentPage
    {
        private LoginViewModel viewModel;

        public LoginPage()
        {
            try
            {
                InitializeComponent();
            }
            catch (Exception ex)
            {
                // 把真正的异常写到日志，便于定位 Android 上的 TargetInvocationException 内部原因
                LogHelper.Error($"LoginPage.InitializeComponent 异常: {ex.Message}\n{ex}");
                try
                {
                    // 非阻塞地提示一条简短信息（避免在初始化期间再次抛错）
                    MainThread.BeginInvokeOnMainThread(async () =>
                    {
                        try { await DisplayAlert("错误", "登录页初始化失败，请查看日志。", "确定"); } catch { }
                    });
                }
                catch { }
                throw; // 保持原调试行为，让调试器能断到这里
            }

            viewModel = BindingContext as LoginViewModel;
            
            if (viewModel != null)
            {
                // 设置页面引用，以便ViewModel可以访问页面元素
                viewModel.LoginPage = this;
                
                // 尝试自动登录
                Task.Run(async () => await viewModel.TryAutoLoginAsync());
            }
            
            LogHelper.Debug("LoginPage: 页面已初始化");
        }
        
        protected override void OnAppearing()
        {
            base.OnAppearing();
            
            // 聚焦到用户名输入框
            UsernameEntry?.Focus();
        }
        
        // 公开方法，供ViewModel调用以获取用户名和密码
        public string GetUsername()
        {
            return UsernameEntry?.Text ?? string.Empty;
        }
        
        public string GetPassword()
        {
            return PasswordEntry?.Text ?? string.Empty;
        }
        
        // 公开方法，供ViewModel调用以显示/隐藏加载指示器
        public void SetLoadingState(bool isLoading)
        {
            MainThread.BeginInvokeOnMainThread(() =>
            {
                if (LoginButton != null)
                {
                    LoginButton.IsEnabled = !isLoading;
                }
            });
        }
        
        // 处理登录成功后的导航
        public async Task NavigateToMainPageAsync()
        {
            await MainThread.InvokeOnMainThreadAsync(async () =>
            {
                try
                {
                    // 修正绝对路由：MainPage 位于 TabBar(MainPages) 下
                    await Shell.Current.GoToAsync("//MainPages/MainPage");
                }
                catch (Exception ex)
                {
                    LogHelper.Error($"导航到主页面失败: {ex.Message}");
                }
            });
        }
    }
}